package net.xinqushi.design.wrapper;

import java.io.FileNotFoundException;
/**
 * 装饰者模式 wrapper , 例子:java源码中的BufferedReader
 * 利用组合模式动态地给一个对象添加一些额外的职责。就增加功能来说，装饰模式相比生成子类更为灵活。
 */
public class GoodsWrapper extends Product { //商品

    private Product in;

    public GoodsWrapper(Product product) {

    }

    @Override
    protected String desc() {
        return in.desc();
    }

    //增加功能，实现wrapper效果
    public String sell() {
        return "卖出" + desc();
    }


    public static void main(String[] args) throws FileNotFoundException {
        //BufferedReader reader = new BufferedReader(new FileReader(new File("abc")));
        //reader.readLine();
        GoodsWrapper goodsWrapper = new GoodsWrapper(new Goods());
        goodsWrapper.sell();
    }


}

class Goods extends Product {

    @Override
    protected String desc() {
        return "商品";
    }
}

//Product 产品可能有商品类产品，非买类产品，赠送类产品等。
abstract class Product {

    protected abstract String desc();

}


